<html>

	<head>
		<title>6.3.5 空合并安全取值调用操作符</title>
		<meta charset="utf-8" />
		<meta name="author" content="jfinal,yaolin" />
		<meta name="Keywords" content="" />
		<link rel="stylesheet" type="text/css" href="../../css/global.css" />
	</head>

	<body>
		<h1>6.3.5 空合并安全取值调用操作符</h1>
		<p>JFinal Template Engine 引入了 swift 与 C#语言中的空合操作符，并在其基础之上进行了极 为自然的扩展，该表达式符号为两个<span class="red">紧靠</span>的问号： ??。 代码示例：</p>
		<img src="../../images/templateEngine/6.3.5.1.png" />
		<p>以上第一行代码的功能与 swift 语言功能完全一样，也即在 seoTitle 值为 null 时整个表达 式取后面表达式的值。而第二行代码表示对 object.field 进行空安全(Null Safe)属性取值， 即在 object 为 null 时表达式不报异常，并且值为 null。</p>
		<p>第三行代码与第二行代码类似，仅仅是属性取值变成了方法调用，并称之为空安全(Null Safe)方法调用，表达式在 object 为 null 时不报异常，其值也为 null。</p>
		<p>当然，空合并与空安全可以极为自然地混合使用，如下是示例：</p>
		<img src="../../images/templateEngine/6.3.5.2.png" />
		<p>以上代码中，第一行代码表示左侧 null safe 属性取值为 null 时，整个表达式的值为后方的 字符串中的值，而第二行代码表示值为 null 时整个表达式取 value 这个变量中的值。 </p>
		<p class="red">特别注意： ?? 操作符的优先级高于数学计算运算符： +、 -、 *、 /、 %，低于单目运算符： !、 ++、 --。 强制改变优先级使用小括号即可。</p>
		<p class="red">例子： a.b ?? && expr 表达式中，其 a.b ?? 为一个整体被求值，因为 ?? 优先级高于数学计 算运算符，而数学计算运算符又高于 && 运算符，进而推导出 ?? 优先级高于&&</p>
	</body>

</html>